Created by:
Chris J. Topping
Dept. Bioscience,
Aarhus University,
DK-8410,
Roende,
Denmark
11th July 2016
Overview
1. Purpose
The rabbit model has been developed with the intention to determine the resilience of the population to agrochemical usage assuming that the stressors affect mortality or reproduction of rabbits exposed.The aim will be to determine how toxic, and over what area and time, chemicals would have to be applied before significant or lasting rabbit population damage is predicted.
2. State variables and scales
Individuals in the rabbit model are represented by objects of four different classes, and there is a fifth class to represent locations for warrens and if they are occupied the warrens themselves. This means that the individual rabbits are classified as being either Young, Juveniles, adult Males, or adult Females. Each class has a number of attributes and behaviours associated with it, and these attributes may be transferred between classes e.g. as young mature to become juveniles, or juveniles to adult.
All of these classes are based on an ancestor class Rabbit_Base which has some basic functionality common to all rabbits. Additionally, a class Rabbit_Adult exists which has functionality common to adult rabbits. These two classes are simply programming constructs and don't affect the model behaviour, and there are never rabbits in the simulation based on these classes. Note however, that the attributes possessed by Rabbit_Base are inherited by all Rabbit classes, and those possessed by Rabbit_Adult are inherited by Rabbit_Male and Rabbit_Female.
Warrens require special mention. The Rabbit_Warren class handles warren functionality. The warren is a square area of the landscape which is of a standard size and must contain a certain proportion of permanent forage habitat (input parameter RABBIT_WARRENMINPCTFORAGE ). The warren manages its own list of resident rabbits and is responsible for ensuring that the number of rabbits does not rise above its carrying capacity which is determined by the total forage available.
Carrying capacity is determined by the number of burrows possible and the number that are actually present. On creation there is no burrows present and a rabbit must first occupy the warren then dig the burrow before breeding can start. Subsequently the warren will grow as rabbits dig further burrows if the warren is continually occupied. After 2 years it will be assumed to have reached the maximum number of burrows possible.
A class attribute overview is presented below, navigate to the individual entry to obtain further details, or look at 'Process Overview and Scheduling' for functions and behaviours below:
Rabbit Base
Rabbit Young
Rabbit Juvenile
Rabbit Adult
The adult class handles those attributes and functions common to all adults. This is currently only mate and dominance status.
- Attribute: Rabbit_Adult::m_dominance Flag to record dominance status (currently unused).
- Attribute: Rabbit_Adult::m_myMate Pointer to the mate if any, otherwise holds NULL.
Rabbit Male
Rabbit Female
Rabbit Warren
3. Process Overview and Scheduling
As with all ALMaSS models the rabbit model is based on a state machine which can be described by a state-transition diagram. Rabbits are in a behavioural state and due to decisions or external events move via transitions to another state where they will exhibit different behaviour.
Base States & Functions
Young States & Functions
Juvenile States & Functions
Adult States & Functions
Male States & Functions
- Behaviour: Rabbit_Male::st_EvaluateTerritory The rabbit must evaluate his territory and decide if he will stay or leave. This decision is based on a number of criteria:
- An evaluation of the current mate status
- An evaluation of the current territory quality
- A comparison with potential areas explored nearby. Here we make the assumption that if suitable quality unoccupied territory is known to be available and the rabbit is not resident in a burrow, then it will move to set up a territory there. If none is avaible or known, then the rabbit will remain as subordinate as long as the current territory can support him. If he is forced out he must find a vacent place or will die.
Figure 3. State transiton diagram for Rabbit_Male class.
Female States & Functions
- Behaviour: Rabbit_Female::st_GiveBirth Female give birth state. Produces kits. If currently lactating then expels the current young. If it is the breeding season and she has a mate, then she becomes pregnant again immediately. The number of young produced is controlled by Rabbit_Female::CalcLitterSize.
- Behaviour: Rabbit_Female::st_Lactating Female lactating state. Each young in the young list is fed until it is either weaned, dies or is booted out due to the arrival of a new litter.
- Behaviour: Rabbit_Female::st_Gestating Female gestating state. No special behaviour here, it is all handled by Rabbit_Female::st_UpdateBreedingStatus
- Behaviour: Rabbit_Female::st_Dying Female dying state. This has some special behaviour associated with the young lists, otherwise calls the Adult dying state.
- Behaviour: Rabbit_Female::st_EvaluateTerritory. The rabbit must evaluate her territory and decide if she will stay or leave. This decision is based on a number of criteria:
- An evaluation of the current mate status
- An evaluation of the current territory quality
- A comparison with potential areas explored nearby. Here we make the assumption that if suitable quality unoccupied territory is known to be available and the rabbit is not resident in a burrow, then it will move to set up a territory there. If none is avaible or known, then the rabbit will remain as subordinate as long as the current territory can support her. If she is forced out she must find a vacent place or will die.
- Behaviour: Rabbit_Female::st_UpdateBreedingStatus Female reproductive update which handles oestrous, gestation, lactation and birth. Determines where we are in the reproductive cycle. Will hold off or switch on oestrous depending upon season, otherwise will update gestation, continue lactating, mate or give birth as necessary. This uses a number of flags and counters specific to the female rabbit to achieve this.NB if she comes into oestrous and has a mate she will automatically become pregnant. Whether oestrous happens depends on her age and on the weather. Initially we assume that the average temperature over the last month determines initiation of breeding. Cessation may be more problematical, but we assume a look ahead function for temperature using a running 30 day mean. If lactating then the young are forced out at 30 days, when she can be giving birth again if it is still breeding season. If it is not breeding season and nothing else is happening then there is a transition to evaluate territory. This requires setting StepDone to true to prevent continuous looping.
- Function: Rabbit_Female::Rabbit_Female Rabbit_Female constructor.
- Function: Rabbit_Female::~Rabbit_Female Rabbit_Female destructor.
- Function: Rabbit_Female::Step The female rabbit step code. The female step code is the most complicated of the rabbit behavioural control. It is very similar to the male's code but with the addition of the behaviours related to reproduction. Each day the cycle involves an evaluation of the current resource status, and then updating the reproductive behaviour.Exactly which behaviour needs to be updated depends on the current status and whether it is breeding season, and of course whether there is a mate.
- Function: Rabbit_Female::AddYoung. Adds a young to the list of young
- Function: Rabbit_Female::OnYoungDeath This is a message received on death of a young. The young will be removed from the young list.
- Function: Rabbit_Female::Weaned This message is received if a young is weaned and needs to be removed from the young list.
- Function: Rabbit_Female::CalcLitterSize. A function which calculates the litter size at birth. Litter sizes are 3-8 young (controlled by configuration variables), but what controls this is not yet implemented, currently the results are stochastic between these extremes.
Figure 4. State transition diagram for Rabbit_Female class.
Warren States & Functions
The warren holds all the information about the cover and forage resources available to the rabbit. In addition it has a list of rabbits that are resident. The number of breeding pairs is controlled by the number of burrows, which itself is controlled by the resources and calculated as a carrying capacity. The actual number of burrows present is also determined by the maintenance of the warren. The warren will achieve its maximum number of burrows if continuously occupied for 2 years. If the warren is abandoned then it will slowly fall into disrepair. The number of burrows possible as a maximum ranges from 3 to 15, fewer than three and the warren is considered unsuitable. Warrens are linked by local networks. This is a method for allowing the rabbits to have some knowledge of their surroundings. Local warrens will be linked and the probability of visiting them during exploration is dependent on their distance from the home warren. Warrens also manage breeding in that a rabbit is currently only allowed to breed if it has both a mate and a burrow. This provides a strong density dependence and prevents juveniles from breeding unless death releases parental burrows.
- GENERAL FUNCTIONS
- NETWORK FUNCTIONS
- RESOURCE AND MORTALITY FUNCTIONS
- Function: Rabbit_Warren::GetAvailableForage Returns the total area of permanent forage plus suitable area of temporary forage.
- Function: Rabbit_Warren::CalcForageArea Returns the total area of permanent forage.
- Function: Rabbit_Warren::GetForageArea Returns the total area of forage.
- Function: Rabbit_Warren::GetTemporaryForageArea Returns the total area of temporary forage.
- Function: Rabbit_Warren::GetCoverArea Returns the total area of cover.
- Function: Rabbit_Warren::GetForageAreaVeg Returns the total area of forage based on veg height.
- Function: Rabbit_Warren::GetCoverAreaVeg Returns the total area of cover based on veg height.
- Function: Rabbit_Warren::CalcDisease Calculates a warren-specific disease constant (translates to a probability). This is based on global and local density.
- Function: Rabbit_Warren::UpdatePesticide. Updates the pesticide concentration in forage polygons. This is a very 'costly' method. It should not be called if there is no pesticide in use. First it zeros all the pesticide loads in the polygon lists. Then is trawls through every warren location and determines if there is a pesticide value at that location.If so the polygon in the list is identified and the total pesticide for that polygon has the new pesticide value added. Finally, the pesticide values in all polygons are divided by the area in the warren and the concentration determined. The net result is that the mean concentration of pesticide per unit habitat is updated daily and available to foraging rabbits.
Rabbit_Population_Manager The rabbit population manager is responsible for handling all lists of rabbits and warrens and scheduling their behaviour. It provides the facilities for output and handles central rabbit functions needed to interact with the landscape. One key function is the pre-processing of the landscape to determine the potential locations for rabbit warrens and the formation of local warren networks allowing rabbits to efficiently locate nearby warrens. This is a very time-consuming step so will typically be done for each landscape and the results stored and used as input later.
Design
4. Design Concepts
4.a Emergence
The breeding season of the rabbits is an emergent property of the weather inputs and the criteria assumed for breeding. This is done by Rabbit_Population_Manager::CheckForRabbitBreedingConditions using monthly mean temperature data as input.
The number and spatial occupancy of warrens (spatial distribution) is emergent from rabbit behaviour interacting with warren networks and the resource distribution in terms of cover and forage.
The rabbit population size is emergent as its age-structure.
The exposure of rabbits to pesticides is emergent dependent upon the pattern of spraying (crops and localities) and the foraging pattern of the rabbits. This is primarily determined by the warren location and the likelihood of a rabbit foraging from a treated area.
4.b Adaptation
Not used.
4.c Fitness
Fitness is measured for the rabbit in terms of whether it has a mate and a burrow, if so it can breed and has a lower mortality rate.
4.d Prediction
The rabbit population manager uses prediction to determine when the rabbit breeding season stops. This is done by looking ahead 90 days into the future weather. This is not prediction in the normal sense of the ODdox, but is an unusual case.
4.e Sensing
Rabbits can sense vacant burrows, other rabbits as potential mates, and can interact with the warren network. The warren network allows them to sense conditions in nearby warrens by travelling there and "looking". They also sense when the breeding season starts and stops.
4.f Interaction
Interactions occur between adult rabbits in finding mates, and between rabbits and the warrens in determining the potential for occupation of warrens and therefore breeding. Weather and environmental conditions influence rabbits both directly (e.g. breeding season timing with temperature, or pesticide induced physiological changes), and indirectly via determining the suitability of warrens and their carrying capacity.
4.g Stochasticity
Stochasticity is used extensively. All rabbits are subject to stochastic mortality, the severity of which is modified by their status and behaviours (e.g. if dispersing). Exploration of local warrens is also stochastic, but modified by distance such that the chance of visiting a nearby warren is distance dependent. Litter size also has a stochastic component.
4.h Collectives
Collectives in the strict sense are not used, although the warren does form a useful administrative unit which can collectively manage some behaviour. Otherwise all rabbits are simulated individually from birth to death.
4.i Observation
Currently the rabbit model uses standard ALMaSS output. This provides a time-indexed population census broken down into young, juvenile, male and females.
5. Initialisation
Uses standard ALMaSS input files, but can be set up to use predefined warren maps. This saves time because calculation of the warren networks takes a long time for big maps. On start-up male and female rabbits are randomly located in the landscape and must initially establish warrens, requiring a burn in time before the simulation can be used for scenario modifications, measurements etc.
All other inputs needed for initialisation are described below.
6. Inputs
Input variables
The upper-case names are the names used in the configuration file. See example below.
- RABBIT_ADULTBASEMORT (float) cfg_adult_base_mort This is the basic daily mortality probability for adult rabbits before any other modifiers are applied. Default value 0.00013
- RABBIT_DAILYGROWTHPARAM_ONE (float) cfg_rabbitdailygrowthparam1 Parameter one of the rabbit growth curve. Default value = 1127.616084
- RABBIT_DAILYGROWTHPARAM_THREE (float) cfg_rabbitdailygrowthparam3 Parameter three of the rabbit growth curve. Default value = 0.0
- RABBIT_DAILYGROWTHPARAM_TWO (float) cfg_rabbitdailygrowthparam2 Parameter two of the rabbit growth curve. Default value = -0.013143202
- RABBIT_DENDEPPERIOD (int) cfg_rabbitdensitydependencedelay The period between recalculation of rabbit disease probability. Default value = 90
- RABBIT_DENSITYDEPSCALER (float) cfg_rabbitdendepscaler Average family size for calculating carrying capacity. Default value = 4.5
- RABBIT_DIGGINGTIME (int) cfg_rabbitdiggingtime Minimum burrow construction time in days. Default value: 10
- RABBIT_DISEASEDENDEPPERIOD (int) cfg_rabbitdiseasedensitydependencedelay The period between recalculation of rabbit disease probability. Default value = 53
- RABBIT_DISPERSALMORTPERM (float) cfg_dispersalmortperm The additional mortality rate with distance for between warren dispersal. Default value 0.0002 allows a max of 20k disp for a very few!
- RABBIT_FIX_SOIL_TYPE (int) cfg_rabbit_fix_soiltype The soil type applied to all warrens if a fixed soil type is used. 0 = chalk, 1 = sandy (only two possible at present). Default value = 0
- RABBIT_FORAGEAREAMORTSCALER (float) cfg_forageareamortscaler A constant used to increase bad weather mortality as a function of the proportion of forage available. Default value = 6.0
- RABBIT_GLOBALDISEASEPROBCONSTANT (float) cfg_globaldisease_probability A constant use to calculate the probability of density related disease. Default value: 0.05
- RABBIT_JUVENILEBASEMORT (float) cfg_juvenile_base_mort This is the basic daily mortality probability for juvenile rabbits before any other modifiers are applied. Default value 0.004
- RABBIT_LITTERABSOPRTIONCONST (float) cfg_litterabsorptionconstant Used to calculate the chance of litter re-absorption depending on forage conditions. Default value = 1.8
- RABBIT_MAXFORAGEHEIGHT (float) cfg_maxForageHeight The maximum height desirable for forage vegetation. Default value 30.0
- RABBIT_MAXFORAGERAINFALL (float) cfg_rabbitmaxforagerainfall The maximum rainfall before rabbits are assumed not to forage. Default value = 3.6
- RABBIT_MAXKITS (float) cfg_rabbitmaxkits The maximum number of kits in a litter. Default value = 9.6
- RABBIT_MAXWARRENNETWORKDIST (float) cfg_maxWarrenNetworkDist The maximum distance between directly connected warrens. Default value = 1500
- RABBIT_MAXWARRENSIZE (float) cfg_rabbitmaxwarrensize Used to calculate the maximum size of a warren. Add min to get the real maximum warren size. Default value = 10 (5 for light soils)
- RABBIT_MINBREEDINGTEMP (float) cfg_rabbitminbreedingtemp The minimum 60 day summed temperature for rabbit breeding. If above this then the population manager breeding flag is set and females will mate if possible. Default value = 300.0
- RABBIT_MINFORAGEDIGESTABILITY (float) cfg_minForageDigestability The minimum digestibility desirable for forage vegetation. Default value: 0.50 range 0.5 to 0.8
- RABBIT_MINFORAGETEMP (float) cfg_rabbitminimumforagetemp The minimum forage temperature for rabbits. Default value = -0.83
- RABBIT_MINKITS (float) cfg_rabbitminkits The minimum number of kits in a litter. Default value = 1.0
- RABBIT_MINWARRENSIZE (float) cfg_rabbitminwarrensize The minimum size of a warren in burrows. Default value = 2 (1 for light soils)
- RABBIT_PESTICDERESPONSETHRESHOLD (float) cfg_RabbitPesticideResponse The threshold above which a rabbit will be killed if it ingests pesticide. Default value = 0.00001
- RABBIT_PESTICIDEDEGRADATIONRATE (float) cfg_rabbit_pesticidedegradationrate Holds the proportion of decay of body burden of pesticide per day. Default of 0.0 will remove all body burden pesticide at the end of each day. Default value = 0.0
- RABBIT_SOCIALREPROTHRESHOLD (float) cfg_rabbitsocialreproductionthreshold The threshold at which social reproduction reduction is tested. 1.0 means 50% chance of reproduction for subordinates. Default value = 2.3
- RABBIT_STARTNOS (int) cfg_RabbitStartNos The starting number of male and female rabbits. Default value is 25000
- RABBIT_USE FIXED_SOIL_TYPE (bool) cfg_rabbit_use_fixed_soiltype Assume fixed soil type or use landscape info? Default = true, use fixed soil type
- RABBIT_USENATALDISPERSALRECORD (bool) cfg_RabbitUseNatalDispersalRecord Flag to denote using lifetime repro output file or not. Default value = false
- RABBIT_USENATALDISPERSALRECORDAGE (int) cfg_RabbitUseNatalDispersalRecordAge Flag to denote using lifetime repro output file or not. Default value = 30*6
- RABBIT_USEREPROOUTPUT (bool) cfg_RabbitUseReproOutput Flag to denote using lifetime repro output file or not.Default value = false
- RABBIT_WARRENFIXEDSIZE (int) cfg_warrenfixedsize The maximum size for a warren (length m). Default = 45
- RABBIT_WARRENLOCATIONSFILE (string) cfg_warrenlocationsfile The warren locations file name. Default value: "RabbitWarrenLocations.txt"
- RABBIT_WARRENOCCUPANCYRECORDDAY (int) cfg_warrenoccupancyrecordday Output control - the day in year for recording warren and population data. Default value:270
- RABBIT_WARRENREADLOCATIONS (bool) cfg_warrenreadlocations Should warren locations be calculated or read from a file? If so uses Rabbit_Population_Manager::LoadWarrenLocations to load the locations of all potential warrens at start up. Default value: Read (true)
- RABBIT_YOUNGBASEMORT (float) cfg_young_base_mort This is the basic daily mortality probability for young rabbits before any other modifiers are applied, e.g. extra mortality due to non-dominant mother. Default value 0.038
In addition to these simple parameter inputs the file RabbitWarrenLocations.txt can be used to prevent calculation of warren locations at run time. See RABBIT_WARRENREWADLOCATIONS above.
7. Interconnections
The rabbit model relies on environmental data primarily from the Landscape and Weather classes. They are also dependent on interactions with the Farm and Crop classes for information on management. Pesticide use and uptake depends on the Pesticide class. The Rabbit_Population_Manager is descended from Population_Manager and performs the role of an auditor in the simulation. Many of the functions and behaviours needed to execute and ALMaSS model are maintained by the Population_Manager.
8. References